/* * $Id$ * * Copyright 2004 Sun Microsystems, Inc., 4150 Network Circle, * Santa Clara, California 95054, U.S.A. All rights reserved. */ package org.jdesktop.swingx.table; import java.io.IOException; import java.text.Collator; import java.util.Comparator; import java.util.Date; import javax.swing.DefaultCellEditor; import javax.swing.JTextField; import junit.framework.TestCase; import org.jdesktop.swingx.decorator.ColorHighlighter; import org.jdesktop.swingx.decorator.CompoundHighlighter; import org.jdesktop.swingx.decorator.Highlighter; import org.jdesktop.swingx.plaf.UIDependent; import org.jdesktop.swingx.renderer.DefaultTableRenderer; import org.jdesktop.test.PropertyChangeReport; import org.jdesktop.test.SerializableSupport; import org.jdesktop.test.TestUtils; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.junit.runners.JUnit4; /** * Unit test of enhanced <code>TableColumnExt</code>. * * @author Jeanette Winzenburg */ @RunWith(JUnit4.class) public class TableColumnExtTest extends TestCase { private TableColumnExt columnExt; @Test public void testHideableOnHidden() { columnExt.setVisible(false); PropertyChangeReport report = new PropertyChangeReport(); columnExt.addPropertyChangeListener(report); columnExt.setHideable(false); assertTrue("visibility must be forced to true", columnExt.isVisible()); assertEquals(1, report.getEventCount("visible")); report.clear(); columnExt.setHideable(true); assertFalse("real visibility value must be returned if hideable", columnExt.isVisible()); assertEquals(1, report.getEventCount("visible")); } @Test public void testHideable() { assertTrue(columnExt.isHideable()); PropertyChangeReport report = new PropertyChangeReport(); columnExt.addPropertyChangeListener(report); columnExt.setHideable(false); TestUtils.assertPropertyChangeEvent(report, "hideable", true, false); } /** * api change: let TableColumnExt implement UIDependent. */ @Test public void testUIDependent() { assertTrue(columnExt instanceof UIDependent); } /** * Issue #822-swingx: replace cloneable by copy constructor. * Here: test base properties copied. */ @Test public void testCopyConstructor() { TableColumnExt columnExt = new TableColumnExt(10, 200, new DefaultTableRenderer(), new DefaultCellEditor(new JTextField(20))); TableColumnExt copy = new TableColumnExt(columnExt); assertEquals(columnExt.getModelIndex(), copy.getModelIndex()); assertEquals(columnExt.getWidth(), copy.getWidth()); assertEquals(columnExt.getCellRenderer(), copy.getCellRenderer()); assertEquals(columnExt.getCellEditor(), copy.getCellEditor()); } /** * test remove * */ @Test public void testPutClientPropertyNullValue() { Object value = new Object(); String key = "some"; columnExt.putClientProperty(key, value); // sanity: got it assertSame(value, columnExt.getClientProperty(key)); columnExt.putClientProperty(key, null); assertNull(columnExt.getClientProperty(key)); // again - for going into the last untested line // but what to test? columnExt.putClientProperty(key, null); assertNull(columnExt.getClientProperty(key)); } /** * test doc'ed exceptions in putClientProperty. * */ @Test(expected= IllegalArgumentException.class) public void testPutClientPropertyExc() { columnExt.putClientProperty(null, "somevalue"); } /** * Sanity test Serializable. * * @throws ClassNotFoundException * @throws IOException * */ @Test public void testSerializable() throws IOException, ClassNotFoundException { Object value = new Date(); columnExt.putClientProperty("date", value); TableColumnExt serialized = SerializableSupport.serialize(columnExt); assertTrue(serialized.isVisible()); assertEquals(value, serialized.getClientProperty("date")); assertEquals(15, serialized.getMinWidth()); assertTrue(serialized.getResizable()); } /** * Issue #154-swingx. * * added property headerTooltip. Test initial value, propertyChange * notification, cloned correctly. * */ @Test public void testHeaderTooltip() { columnExt.setTitle("mytitle"); assertNull("tooltip is null initially", columnExt.getToolTipText()); String toolTip = "some column text"; PropertyChangeReport report = new PropertyChangeReport(); columnExt.addPropertyChangeListener(report); columnExt.setToolTipText(toolTip); assertEquals(toolTip, columnExt.getToolTipText()); assertEquals("must have fired one propertyChangeEvent for toolTipText ", 1, report.getEventCount("toolTipText")); TableColumnExt copy = new TableColumnExt(columnExt); assertEquals("tooltip property must be cloned", columnExt.getToolTipText(), copy.getToolTipText()); } /** * Test the sortable property: must fire propertyChange and * be cloned properly * */ @Test public void testSortable() { boolean sortable = columnExt.isSortable(); assertTrue("columnExt isSortable by default", sortable); PropertyChangeReport report = new PropertyChangeReport(); columnExt.addPropertyChangeListener(report); columnExt.setSortable(!sortable); // sanity assert: the change was taken assertEquals(sortable, !columnExt.isSortable()); assertEquals("must have fired one propertyChangeEvent for sortable ", 1, report.getEventCount("sortable")); TableColumnExt copy = new TableColumnExt(columnExt); assertEquals("sortable property must be cloned", columnExt.isSortable(), copy.isSortable()); } /** * Issue #273-swingx: make Comparator a bound property of TableColumnExt. * (instead of client property) * * test if setting comparator fires propertyChange. */ @Test public void testComparatorBoundProperty() { PropertyChangeReport report = new PropertyChangeReport(); columnExt.addPropertyChangeListener(report); Comparator<?> comparator = Collator.getInstance(); columnExt.setComparator(comparator); assertTrue(report.hasEvents()); assertEquals(1, report.getEventCount("comparator")); } /** * Issue #273-swingx: make Comparator a bound property of TableColumnExt. * (instead of client property) * * test if comparator is cloned. */ @Test public void testCopyComparator() { Comparator<?> comparator = Collator.getInstance(); columnExt.setComparator(comparator); TableColumnExt clone = new TableColumnExt(columnExt); assertEquals(comparator, clone.getComparator()); } /** * Issue #280-swingx: tableColumnExt doesn't fire propertyChange on * putClientProperty. * */ @Test public void testClientPropertyNotification() { PropertyChangeReport report = new PropertyChangeReport(); columnExt.addPropertyChangeListener(report); Object value = new Integer(3); columnExt.putClientProperty("somevalue", value); assertTrue(report.hasEvents()); assertEquals(1, report.getEventCount("somevalue")); } /** * Issue #279-swingx: getTitle throws NPE. * */ @Test public void testTitle() { columnExt.getTitle(); } /** * user friendly resizable flag. * */ @Test public void testResizable() { //sanity assert assertTrue("min < max", columnExt.getMinWidth() < columnExt.getMaxWidth()); // sanity assert assertTrue("resizable default", columnExt.getResizable()); columnExt.setMinWidth(columnExt.getMaxWidth()); assertFalse("must not be resizable with equal min-max", columnExt.getResizable()); TableColumnExt copy = new TableColumnExt(columnExt); // sanity assertEquals("min-max of clone", copy.getMinWidth(), copy.getMaxWidth()); assertFalse("must not be resizable with equal min-max", copy.getResizable()); copy.setMinWidth(0); //sanity assert assertTrue("min < max", copy.getMinWidth() < copy.getMaxWidth()); assertTrue("cloned base resizable", copy.getResizable()); } /** * Issue #39-swingx: * Client properties not preserved when cloning. * */ @Test public void testCopyClientProperty() { String key = "property"; Object value = new Object(); columnExt.putClientProperty(key, value); TableColumnExt copy = new TableColumnExt(columnExt); assertEquals("client property must be in cloned", value, copy.getClientProperty(key)); key = "single"; columnExt.putClientProperty(key, value); //sanity check assertSame(value, columnExt.getClientProperty(key)); assertNull("cloned client properties must be in independant", copy.getClientProperty(key)); } //begin SwingX Issue #770 checks // PENDING JW: consider to remove the "HighlighterClient" // related testing here - that part is done in TableColumnExtAsHighlighterClient in package // swingx. /** * Check for setHighlighters portion of #770. */ @Test public void testSetHighlighters() { PropertyChangeReport hcl = new PropertyChangeReport(); columnExt.addPropertyChangeListener(hcl); Highlighter h1 = new ColorHighlighter(); Highlighter h2 = new ColorHighlighter(); //sanity check assertEquals(0, hcl.getEventCount()); //base case no highlighters assertSame(CompoundHighlighter.EMPTY_HIGHLIGHTERS, columnExt.getHighlighters()); columnExt.setHighlighters(h1); assertEquals(1, hcl.getEventCount()); assertEquals("highlighters", hcl.getLastProperty()); assertEquals(1, columnExt.getHighlighters().length); assertSame(h1, columnExt.getHighlighters()[0]); //reset state hcl.clear(); columnExt.removeHighlighter(h1); assertEquals(1, hcl.getEventCount()); assertEquals("highlighters", hcl.getLastProperty()); //we have a compound, but empty highlighter assertEquals(0, columnExt.getHighlighters().length); // JW: changed CompoundHighlighter to return its EMPTY_HIGHLIGHTERS if empty assertSame(CompoundHighlighter.EMPTY_HIGHLIGHTERS, columnExt.getHighlighters()); //reset state hcl.clear(); columnExt.setHighlighters(h1, h2); assertEquals(1, hcl.getEventCount()); assertEquals("highlighters", hcl.getLastProperty()); assertEquals(2, columnExt.getHighlighters().length); assertSame(h1, columnExt.getHighlighters()[0]); assertSame(h2, columnExt.getHighlighters()[1]); } /** * Check for addHighlighter portion of #770. */ @Test public void testAddHighlighter() { PropertyChangeReport hcl = new PropertyChangeReport(); columnExt.addPropertyChangeListener(hcl); Highlighter h1 = new ColorHighlighter(); Highlighter h2 = new ColorHighlighter(); //sanity check assertEquals(0, hcl.getEventCount()); //base case no highlighters assertSame(CompoundHighlighter.EMPTY_HIGHLIGHTERS, columnExt.getHighlighters()); columnExt.addHighlighter(h1); assertEquals(1, hcl.getEventCount()); assertEquals("highlighters", hcl.getLastProperty()); assertEquals(1, columnExt.getHighlighters().length); assertSame(h1, columnExt.getHighlighters()[0]); //reset state hcl.clear(); columnExt.removeHighlighter(h1); assertEquals(1, hcl.getEventCount()); assertEquals("highlighters", hcl.getLastProperty()); //we have a compound, but empty highlighter assertEquals(0, columnExt.getHighlighters().length); // JW: changed CompoundHighlighter to return its EMPTY_HIGHLIGHTERS if empty assertSame(CompoundHighlighter.EMPTY_HIGHLIGHTERS, columnExt.getHighlighters()); columnExt.setHighlighters(h1); //reset state hcl.clear(); columnExt.addHighlighter(h2); assertEquals(1, hcl.getEventCount()); assertEquals("highlighters", hcl.getLastProperty()); assertEquals(2, columnExt.getHighlighters().length); assertSame(h1, columnExt.getHighlighters()[0]); assertSame(h2, columnExt.getHighlighters()[1]); } /** * Check for removeHighlighter portion of #770. */ @Test public void testRemoveHighlighter() { PropertyChangeReport hcl = new PropertyChangeReport(); columnExt.addPropertyChangeListener(hcl); Highlighter h1 = new ColorHighlighter(); Highlighter h2 = new ColorHighlighter(); Highlighter h3 = new ColorHighlighter(); //sanity check assertEquals(0, hcl.getEventCount()); //ensure that nothing goes awry columnExt.removeHighlighter(h1); assertEquals(0, hcl.getEventCount()); columnExt.setHighlighters(h1, h2, h3); //reset state hcl.clear(); columnExt.removeHighlighter(h2); assertEquals(1, hcl.getEventCount()); assertEquals("highlighters", hcl.getLastProperty()); assertEquals(2, columnExt.getHighlighters().length); assertSame(h1, columnExt.getHighlighters()[0]); assertSame(h3, columnExt.getHighlighters()[1]); } /** * Check to ensure that the clone returns the highlighters correctly. Part of #770. */ @Test public void testCopyHighlighters() { Highlighter h1 = new ColorHighlighter(); Highlighter h2 = new ColorHighlighter(); Highlighter h3 = new ColorHighlighter(); columnExt.setHighlighters(h1, h2); TableColumnExt clone = new TableColumnExt(columnExt); Highlighter[] columnHighlighters = columnExt.getHighlighters(); Highlighter[] cloneHighlighters = clone.getHighlighters(); assertEquals(2, columnHighlighters.length); assertEquals(columnHighlighters.length, cloneHighlighters.length); assertSame(h1, columnHighlighters[0]); assertSame(columnHighlighters[0], cloneHighlighters[0]); assertSame(h2, columnHighlighters[1]); assertSame(columnHighlighters[1], cloneHighlighters[1]); columnExt.addHighlighter(h3); columnHighlighters = columnExt.getHighlighters(); cloneHighlighters = clone.getHighlighters(); assertEquals(3, columnHighlighters.length); assertEquals(columnHighlighters.length, cloneHighlighters.length + 1); assertSame(h1, columnHighlighters[0]); assertSame(columnHighlighters[0], cloneHighlighters[0]); assertSame(h2, columnHighlighters[1]); assertSame(columnHighlighters[1], cloneHighlighters[1]); assertSame(h3, columnHighlighters[2]); } /** * @inherited <p> */ @Before @Override public void setUp() throws Exception { columnExt = new TableColumnExt(); } }